package utils

import (
	"crypto/rand"
	"math/big"
	"strings"
)

// 定义 Token 包含的字符集
const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

// GenerateSecureRandomToken 生成指定长度的安全随机 Token
func GenerateSecureRandomToken(length int) (string, error) {
	var sb strings.Builder
	// 计算字符集的长度
	charsetLen := big.NewInt(int64(len(charset)))
	for i := 0; i < length; i++ {
		// 生成安全的随机数
		n, err := rand.Int(rand.Reader, charsetLen)
		if err != nil {
			return "", err
		}
		// 从字符集中选择对应的字符
		sb.WriteByte(charset[n.Int64()])
	}
	return sb.String(), nil
}
